package com.example.util;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalUtils {


    // 加法
    public static BigDecimal add(BigDecimal a, BigDecimal b) {
        return a.add(b).setScale(2, RoundingMode.HALF_UP);
    }

    // 减法
    public static BigDecimal subtract(BigDecimal a, BigDecimal b) {
        return a.subtract(b).setScale(2, RoundingMode.HALF_UP);
    }

    // 乘法
    public static BigDecimal multiply(BigDecimal a, BigDecimal b) {
        return a.multiply(b).setScale(2, RoundingMode.HALF_UP);
    }

    // 除法
    public static BigDecimal divide(BigDecimal a, BigDecimal b) {
        return a.divide(b, 2, RoundingMode.HALF_UP);
    }

    /**
     * 判断a是否等于b
     */
    public static boolean eq(BigDecimal a, BigDecimal b) {
        return a.compareTo(b) == 0;
    }

    /**
     * 判断a是否不等于b
     */
    public static boolean ne(BigDecimal a, BigDecimal b) {
        return a.compareTo(b) != 0;
    }

    /**
     * 判断a是否大于b
     */
    public static boolean gt(BigDecimal a, BigDecimal b) {
        return a.compareTo(b) > 0;
    }

    /**
     * 判断a是否大于等于b
     */
    public static boolean ge(BigDecimal a, BigDecimal b) {
        return a.compareTo(b) >= 0;
    }

    /**
     * 判断a是否小于b
     */
    public static boolean lt(BigDecimal a, BigDecimal b) {
        return a.compareTo(b) < 0;
    }

    /**
     * 判断a是否小于等于b
     */
    public static boolean le(BigDecimal a, BigDecimal b) {
        return a.compareTo(b) <= 0;
    }

    /**
     * 判断金额是否为0
     */
    public static boolean isZero(BigDecimal amount) {
        return amount.compareTo(BigDecimal.ZERO) == 0;
    }

    /**
     * 判断金额是否为正数
     */
    public static boolean isPositive(BigDecimal amount) {
        return amount.compareTo(BigDecimal.ZERO) > 0;
    }

    /**
     * 判断金额是否为负数
     */
    public static boolean isNegative(BigDecimal amount) {
        return amount.compareTo(BigDecimal.ZERO) < 0;
    }

    /**
     * 判断金额是否在指定范围内 [min, max]
     */
    public static boolean isInRange(BigDecimal amount, BigDecimal min, BigDecimal max) {
        return ge(amount, min) && le(amount, max);
    }

    public static void main(String[] args) {
        BigDecimal price = new BigDecimal("19.99");
        int quantity = 1;

        BigDecimal bigDecimal = new BigDecimal("19.99");

        BigDecimal b=BigDecimalUtils.add(price, bigDecimal);

        System.out.println(b.toString());
    }
}
